(function(rules,globalObj){// borrowed from prototypejs

Object.extend = function(destination, source) {
	for (var property in source){
		destination[property] = source[property];
	}
	return destination;
};

// By D. Crockford

Object.create = function( o){
	var F = function(){};
	F.prototype=o;
	return new F();
};var algors = {
	"Naked Single-": function(){
			var data = sdkHistory.current();
			var singles= data.filterByCount(1),
				houseIDs= rules.houseIDs,
				i=0,
				j=0,
				k=0,
				found = false,
				neighbours = [];
				
			do{
				// Iterating Singles
				j=0;
				do{
					//Iterating Houses
					if( singles[i].isInHouse( houseIDs[j])){
						neighbours= data.filterByHouse( houseIDs[j]).filterNotCount(1);
						k=0;
						do{
							// Iterating Neighbours
							found = neighbours[k].disable( singles[i].candids[0]);
						}while( !found && ++k< neighbours.length);
					}
				}while( !found && ++j< houseIDs.length);
			}while( !found && ++i< singles.length);
			if( found){
				return found;
			}
		},
	"Naked Single": function( ){
			var data = sdkHistory.current(),
				changes = sdkChange([]);
			data.filterByCount(1).forEach( function(solvedCell){
				solvedCell.houses.forEach( function(sCHouseId){
					changes = changes.add( data.filterByHouse( sCHouseId).filterNotCount(1).disable( solvedCell.candids[0]));
				});
			});
			changes = sdkChange.unique( changes);
			return changes;
		},
	"Hidden Single": function( data){
			var data = sdkHistory.current(),
				changes = sdkChange([]),
				blub;
			rules.houseIDs.forEach( function(house){
				rules.candidIDs.forEach( function(candidID){
					blub = data.filterByHouse( house).filterByCandid( candidID);
					if( blub.length === 1 && blub[0].candids.length !== 1){ 
						changes = changes.add(blub.only( candidID));
					}
				});
			});
			
			changes = sdkChange.unique( changes);
			return changes;
		}
	};
(function(){
	
globalObj.sdkCell = function sdkCellFn( id, candids, houses){
	var p = Object.create(sdkCell.proto);
	var o= {
		candids: candids,
		houses: houses,
		get id(){ return id}
	};
	p=Object.extend(p,o);
	return p;
};

globalObj.sdkCell.proto = {
		contains: function ( candid) {
			return this.candids.indexOf(candid)>=0;
		},
		isSolved: function (){ 
			return this.candids.length === 1;
		},
		enable: function( candidID, bool){
			if( bool && !this.contains( candidID)){
				this.candids.push( candidID);
				return this;
			}
			if( !bool && !this.contains( candidID)){
				return sdkChange("enable", this.id, candidID);
			}
		},
		disable: function( candidID, bool){
			if( bool && this.contains(candidID)){
				this.candids= this.candids.filter(function( elem){
					return elem !== candidID;
				});
				return this;
			}
			if( !bool && this.contains(candidID)){
				return sdkChange("disable", this.id, candidID);
			}
		},
		only: function( candidID, bool){
			if( bool){
				this.candids = ( this.candids.length === 1) ? rules.candidIDs: [candidID];
				return this;
			} else {
				return sdkChange("only", this.id, candidID);
			}
		},
		swap: function ( candidID, bool){	
			if( bool){
				if( this.contains( candidID)){
					this.disable( candidID, bool);
				}else{
					this.enable( candidID, bool);
				}
				return this;
			} else {
				return sdkChange("swap", this.id, candidID);
			}
		},
		isInHouse: function( houseId){
			return this.houses.indexOf( houseId ) >=0;
		},
		count: function(){
			return this.candids.length;
		}
};

globalObj.sdkCell.copy= function( cell){
	return sdkCell( cell.id, cell.candids.concat(), cell.houses.concat() );
};

})();

function sdkChangeSingle( cmd, cellID, candidID){
	return {
		cmd: cmd,
		cellID:cellID,
		candidID: candidID,
		exec: function( slice){
			slice=sdkSlice( slice.concat());
			var a = slice.filterByID( cellID);
			switch( cmd){
				case "swap":
					a=a.swap( candidID, true);
					break;
				case "only":
					a=a.only( candidID, true);
					break;
				case "disable":
					a=a.disable( candidID, true);
					break;
				case "enable":
					a=a.enable( candidID, true);
					break;
				default:
					throw "Unknown command for sdkChange: "+ cmd;
			}
			a=a.concat( slice.filterNotID(cellID));
			return sdkSlice(a);
		},
		add: function( arr){
			return [this, arr];
		},
		id : function(){
			return cmd+cellID+candidID;
		}
	};
}

var sdkChange = Object.extend(function sdkChangeFn( arg){
	if( arguments.length > 1){
		return sdkChangeSingle.apply(undefined, arguments);
	} else {
		if( !arg){
			arg = [];
		}
		arg.exec = function( arr){
			arr = arr.concat();
			this.forEach(function( elem){
				arr= elem.exec(arr);
			});
			return arr;
		};
		arg.add = function( arr){
			return sdkChange( this.concat( arr));
		};

		return arg;
	}
},{
	unique: function( arr){
		var newArr= [],
			ids= {};
			
		for( var i=0; i< arr.length; i++){
			if( arr[i] !== undefined && !ids[ arr[i].id()] ){
				newArr.push( arr[i]);
				ids[ arr[i].id()]=true;
			}
		}
		
		return sdkChange( newArr);
	}
});
var sdkHistory = {
	history: [],
	top: [],
	bottom: [],
	step: 0,
	current: function(){
		return this.top;
	},
	next: function( step){
		if( step){
			this.history.unshift( step);
			this.top = step.exec( this.top);
			return this.top;
		}
	},
	base: function( arg){
		this.bottom = arg;
		this.history= [];
		this.top= sdkSlice.copy(arg);
		this.arg= 0;
	}
};

var intercom = {
	handler: [],
	register: function(cmd, callback, context){
		this.handler.push( {"cmd":cmd,"callback":callback,"context":context});
	},
	catcher : function( e){
		var ret = {},
			fn = this.handler.filter( function( handle){
				return handle.cmd === e.data.cmd;
			},this);
		
		if( fn.length ===0){
			return "fail.";
		}
		if( fn.length >1){
			return "too many handlers";
		}
		fn=fn[0];
		try{
			ret = fn.callback.call(fn.context,e.data);
		}catch(error){
			cl(e.data.cmd);
			
			throw(error);
		}
		if(ret===undefined){
			ret = {cmd:"void"};
		}
		if(!ret.refid){
			ret.refid = e.data.refid;
		}
		postMessage( ret);
	}
};

function cl( a){
	postMessage({cmd:"cl",args:{value:a}});
}

function tempCatcher(e){
	intercom.catcher(e);
}
globalObj.onmessage = tempCatcher;

intercom.register("init", function(e){
	sdkHistory.base( sdkSlice(e.args.field));
	return getHandler({args:{value:"field"}});
});

function getHandler(e){
	switch( e.args.value){
		case "field":
			return {
				cmd: "post_field",
				args: {
					value: sdkHistory.current()
				}
			};
		case "cell":
			return {
				cmd: "post_cell",
				args: {
					value: sdkHistory.current().filterByID(e.args.cellID)
				}
			};
		case "all_candids":
			return {
				cmd: "post_all_candids",
				args:{
					value: rules.candidIDs
				}
			};
		default:
			if(rules[e.args.value]){
				return {
					cmd: "post_"+e.args.value,
					args:{
						value: rules[e.args.value]
					}
				};
			}
			return undefined;
	}
}
intercom.register("get", getHandler);

intercom.register("get_multiple",function(e){
	var ret = {};
	for( var i=0; i<e.args.values.length;i++){
		var req= e.args.values[i];
		ret[req]=getHandler({args:{value:req}}).args.value;
	}
	return {cmd:"post_multiple",args:ret};
});
intercom.register("status",function(e){
	return {
		cmd:"cl",
		args:{
			value:sdkHistory
		}
	};
});
intercom.register("change",function(e){
switch( e.args.value){
	case "swap":
		//history.unshift( sdkChange("swap",e.args.cellID,e.args.candidID));
		//field = history[0].exec( field);
		sdkHistory.next( sdkChange("swap",e.args.cellID,e.args.candidID));
		return getHandler({args:{value:"cell",cellID:e.args.cellID}});
	case "only":
		//history.unshift( sdkChange("only",[e.args.cellID],[e.args.candidID]));
		//field = history[0].exec( field);
		sdkHistory.next( sdkChange("only",e.args.cellID,e.args.candidID));
		return getHandler({args:{value:"cell",cellID:e.args.cellID}});
}});
intercom.register("calc",function(e){
	if( algors[e.args.value]){
		sdkHistory.next( algors[e.args.value]( sdkHistory.current()));
		return getHandler({args:{value:"field"}});
	}
});
var sdkSlice = Object.extend(function sdkSliceFn( data){
	if( data.isSlice){
		return data;
	}
	if( typeof data == "string" || data instanceof String){
		data = (function parse( sz){
			var field = [];
			for( var i=0; i<sz.length; i++) {
				field.push( sdkCell(
					rules.cellIDs[i],
					sz[i]==="0"? rules.candidIDs :[sz[i]],
					rules.cellsToHouses[ rules.cellIDs[i]]
				));
			}
			return field;
		})( data);
	}	
	return Object.extend(data,{
		isSlice : true,
		isSolved: function(){
			return this.every(function( cell){
				return cell.isSolved();
			});
		},
		disable: function( candidID, bool){
			return sdkSlice( this.map( function(cell){
				return cell.disable(candidID, bool);
			}));
		},
		swap: function( candidID, bool){
			return sdkSlice(this.map( function(cell){
				return cell.swap( candidID, bool);
			}));
		},
		only: function( candidID, bool){
			return sdkSlice(this.map( function(cell){
				return cell.only( candidID, bool);
			}));
		},
		
		// == FILTER ==
		filterBy: function( callback, context){
			return sdkSlice( this.filter(callback, context).concat());
		},
		
		filterByHouse: function( arg){
			return this.filterBy(function (cell) {
					return cell.isInHouse( arg);
				});
		},
		
		filterByCount: function( arg){
			return this.filterBy( function (cell) {
					return cell.count() === arg;
				});
		},
		
		filterNotCount: function( arg){
			return this.filterBy( function (cell) {
					return cell.count() !== arg;
				});
		},
		
		filterByCandid: function( arg){
			return this.filterBy( function (cell) {
					return cell.contains( arg);
				});
		},
		
		filterByID: function( arg){
			return this.filterBy( function( cell){
					return cell.id === arg;
				});
		},
		
		filterNotID: function(arg){
			return this.filterBy( function( cell){
					return cell.id !== arg;
				});
		}
	});
},{ 
	unique: function( arr){
		var newArr = [],
			ids = {};
			
		for( var i= 0; i< arr.length; i++){
			if( arr[i]!==undefined && !ids[ arr[i].id]){
				newArr.push(arr[i]);
				ids[ arr[i].id]=true;
			}
		}
		return sdkSlice( newArr);
	},
	copy: function( arr){
		return sdkSlice(arr.map(function(cell){return sdkCell.copy(cell);}).concat());
	},
	parse: function parse( sz){
		var field = [];
		for( var i=0; i<sz.length; ++i) {
			field.push( sdkCell(
				rules.cellIDs[i],
				sz[i]==="0"? rules.candidIDs :[sz[i]],
				rules.cellsToHouses[ rules.cellIDs[i]]
			));
		}
		return field;
	}
});})({
	name : "classic 9x9x9",
	author: "Kambfhase@hotmail.de",
	version: "0.1",
	mode: "advanced",
	candidIDs : ['1','2','3','4','5','6','7','8','9'],
	cellIDs : [
"c00",
"c01",
"c02",
"c03",
"c04",
"c05",
"c06",
"c07",
"c08",
"c09",
"c010",
"c011",
"c012",
"c013",
"c014",
"c015",
"c016",
"c017",
"c018",
"c019",
"c020",
"c021",
"c022",
"c023",
"c024",
"c025",
"c026",
"c027",
"c028",
"c029",
"c030",
"c031",
"c032",
"c033",
"c034",
"c035",
"c036",
"c037",
"c038",
"c039",
"c040",
"c041",
"c042",
"c043",
"c044",
"c045",
"c046",
"c047",
"c048",
"c049",
"c050",
"c051",
"c052",
"c053",
"c054",
"c055",
"c056",
"c057",
"c058",
"c059",
"c060",
"c061",
"c062",
"c063",
"c064",
"c065",
"c066",
"c067",
"c068",
"c069",
"c070",
"c071",
"c072",
"c073",
"c074",
"c075",
"c076",
"c077",
"c078",
"c079",
"c080",
"c10",
"c11",
"c12",
"c13",
"c14",
"c15",
"c16",
"c17",
"c18",
"c19",
"c110",
"c111",
"c112",
"c113",
"c114",
"c115",
"c116",
"c117",
"c118",
"c119",
"c120",
"c121",
"c122",
"c123",
"c124",
"c125",
"c126",
"c127",
"c128",
"c129",
"c130",
"c131",
"c132",
"c133",
"c134",
"c135",
"c136",
"c137",
"c138",
"c139",
"c140",
"c141",
"c142",
"c143",
"c144",
"c145",
"c146",
"c147",
"c148",
"c149",
"c150",
"c151",
"c152",
"c153",
"c154",
"c155",
"c156",
"c157",
"c158",
"c159",
"c160",
"c161",
"c162",
"c163",
"c164",
"c165",
"c166",
"c167",
"c168",
"c169",
"c170",
"c171",
"c172",
"c173",
"c174",
"c175",
"c176",
"c177",
"c178",
"c179",
"c180",
"c20",
"c21",
"c22",
"c23",
"c24",
"c25",
"c26",
"c27",
"c28",
"c29",
"c210",
"c211",
"c212",
"c213",
"c214",
"c215",
"c216",
"c217",
"c218",
"c219",
"c220",
"c221",
"c222",
"c223",
"c224",
"c225",
"c226",
"c227",
"c228",
"c229",
"c230",
"c231",
"c232",
"c233",
"c234",
"c235",
"c236",
"c237",
"c238",
"c239",
"c240",
"c241",
"c242",
"c243",
"c244",
"c245",
"c246",
"c247",
"c248",
"c249",
"c250",
"c251",
"c252",
"c253",
"c254",
"c255",
"c256",
"c257",
"c258",
"c259",
"c260",
"c261",
"c262",
"c263",
"c264",
"c265",
"c266",
"c267",
"c268",
"c269",
"c270",
"c271",
"c272",
"c273",
"c274",
"c275",
"c276",
"c277",
"c278",
"c279",
"c280",
"c30",
"c31",
"c32",
"c33",
"c34",
"c35",
"c36",
"c37",
"c38",
"c39",
"c310",
"c311",
"c312",
"c313",
"c314",
"c315",
"c316",
"c317",
"c318",
"c319",
"c320",
"c321",
"c322",
"c323",
"c324",
"c325",
"c326",
"c327",
"c328",
"c329",
"c330",
"c331",
"c332",
"c333",
"c334",
"c335",
"c336",
"c337",
"c338",
"c339",
"c340",
"c341",
"c342",
"c343",
"c344",
"c345",
"c346",
"c347",
"c348",
"c349",
"c350",
"c351",
"c352",
"c353",
"c354",
"c355",
"c356",
"c357",
"c358",
"c359",
"c360",
"c361",
"c362",
"c363",
"c364",
"c365",
"c366",
"c367",
"c368",
"c369",
"c370",
"c371",
"c372",
"c373",
"c374",
"c375",
"c376",
"c377",
"c378",
"c379",
"c380"],
	houseIDs : [
"hr00","hb00","hc00",
"hr01","hb01","hc01",
"hr02","hb02","hc02",
"hr03","hb03","hc03",
"hr04","hb04","hc04",
"hr05","hb05","hc05",
"hr06","hb06","hc06",
"hr07","hb07","hc07",
"hr08","hb08","hc08",
"hr10","hb10","hc10",
"hr11","hb11","hc11",
"hr12","hb12","hc12",
"hr13","hb13","hc13",
"hr14","hb14","hc14",
"hr15","hb15","hc15",
"hr16","hb16","hc16",
"hr17","hb17","hc17",
"hr18","hb18","hc18",
"hr20","hb20","hc20",
"hr21","hb21","hc21",
"hr22","hb22","hc22",
"hr23","hb23","hc23",
"hr24","hb24","hc24",
"hr25","hb25","hc25",
"hr26","hb26","hc26",
"hr27","hb27","hc27",
"hr28","hb28","hc28",
"hr30","hb30","hc30",
"hr31","hb31","hc31",
"hr32","hb32","hc32",
"hr33","hb33","hc33",
"hr34","hb34","hc34",
"hr35","hb35","hc35",
"hr36","hb36","hc36",
"hr37","hb37","hc37",
"hr38","hb38","hc38"],
	cellsToHouses: {
"c00":["hr00","hc00","hb00"],
"c01":["hr00","hc01","hb00"],
"c02":["hr00","hc02","hb00"],
"c03":["hr00","hc03","hb01"],
"c04":["hr00","hc04","hb01"],
"c05":["hr00","hc05","hb01"],
"c06":["hr00","hc06","hb02"],
"c07":["hr00","hc07","hb02"],
"c08":["hr00","hc08","hb02"],
"c09":["hr01","hc00","hb00"],
"c010":["hr01","hc01","hb00"],
"c011":["hr01","hc02","hb00"],
"c012":["hr01","hc03","hb01"],
"c013":["hr01","hc04","hb01"],
"c014":["hr01","hc05","hb01"],
"c015":["hr01","hc06","hb02"],
"c016":["hr01","hc07","hb02"],
"c017":["hr01","hc08","hb02"],
"c018":["hr02","hc00","hb00"],
"c019":["hr02","hc01","hb00"],
"c020":["hr02","hc02","hb00"],
"c021":["hr02","hc03","hb01"],
"c022":["hr02","hc04","hb01"],
"c023":["hr02","hc05","hb01"],
"c024":["hr02","hc06","hb02"],
"c025":["hr02","hc07","hb02"],
"c026":["hr02","hc08","hb02"],
"c027":["hr03","hc00","hb01"],
"c028":["hr03","hc01","hb01"],
"c029":["hr03","hc02","hb01"],
"c030":["hr03","hc03","hb02"],
"c031":["hr03","hc04","hb02"],
"c032":["hr03","hc05","hb02"],
"c033":["hr03","hc06","hb03"],
"c034":["hr03","hc07","hb03"],
"c035":["hr03","hc08","hb03"],
"c036":["hr04","hc00","hb01"],
"c037":["hr04","hc01","hb01"],
"c038":["hr04","hc02","hb01"],
"c039":["hr04","hc03","hb02"],
"c040":["hr04","hc04","hb02"],
"c041":["hr04","hc05","hb02"],
"c042":["hr04","hc06","hb03"],
"c043":["hr04","hc07","hb03"],
"c044":["hr04","hc08","hb03"],
"c045":["hr05","hc00","hb01"],
"c046":["hr05","hc01","hb01"],
"c047":["hr05","hc02","hb01"],
"c048":["hr05","hc03","hb02"],
"c049":["hr05","hc04","hb02"],
"c050":["hr05","hc05","hb02"],
"c051":["hr05","hc06","hb03"],
"c052":["hr05","hc07","hb03"],
"c053":["hr05","hc08","hb03"],
"c054":["hr06","hc00","hb02"],
"c055":["hr06","hc01","hb02"],
"c056":["hr06","hc02","hb02"],
"c057":["hr06","hc03","hb03"],
"c058":["hr06","hc04","hb03"],
"c059":["hr06","hc05","hb03"],
"c060":["hr06","hc06","hb04"],
"c061":["hr06","hc07","hb04"],
"c062":["hr06","hc08","hb04"],
"c063":["hr07","hc00","hb02"],
"c064":["hr07","hc01","hb02"],
"c065":["hr07","hc02","hb02"],
"c066":["hr07","hc03","hb03"],
"c067":["hr07","hc04","hb03"],
"c068":["hr07","hc05","hb03"],
"c069":["hr07","hc06","hb04"],
"c070":["hr07","hc07","hb04"],
"c071":["hr07","hc08","hb04"],
"c072":["hr08","hc00","hb02"],
"c073":["hr08","hc01","hb02"],
"c074":["hr08","hc02","hb02"],
"c075":["hr08","hc03","hb03"],
"c076":["hr08","hc04","hb03"],
"c077":["hr08","hc05","hb03"],
"c078":["hr08","hc06","hb04"],
"c079":["hr08","hc07","hb04"],
"c080":["hr08","hc08","hb04"],
"c10":["hr10","hc10","hb10"],
"c11":["hr10","hc11","hb10"],
"c12":["hr10","hc12","hb10"],
"c13":["hr10","hc13","hb11"],
"c14":["hr10","hc14","hb11"],
"c15":["hr10","hc15","hb11"],
"c16":["hr10","hc16","hb12"],
"c17":["hr10","hc17","hb12"],
"c18":["hr10","hc18","hb12"],
"c19":["hr11","hc10","hb10"],
"c110":["hr11","hc11","hb10"],
"c111":["hr11","hc12","hb10"],
"c112":["hr11","hc13","hb11"],
"c113":["hr11","hc14","hb11"],
"c114":["hr11","hc15","hb11"],
"c115":["hr11","hc16","hb12"],
"c116":["hr11","hc17","hb12"],
"c117":["hr11","hc18","hb12"],
"c118":["hr12","hc10","hb10"],
"c119":["hr12","hc11","hb10"],
"c120":["hr12","hc12","hb10"],
"c121":["hr12","hc13","hb11"],
"c122":["hr12","hc14","hb11"],
"c123":["hr12","hc15","hb11"],
"c124":["hr12","hc16","hb12"],
"c125":["hr12","hc17","hb12"],
"c126":["hr12","hc18","hb12"],
"c127":["hr13","hc10","hb11"],
"c128":["hr13","hc11","hb11"],
"c129":["hr13","hc12","hb11"],
"c130":["hr13","hc13","hb12"],
"c131":["hr13","hc14","hb12"],
"c132":["hr13","hc15","hb12"],
"c133":["hr13","hc16","hb13"],
"c134":["hr13","hc17","hb13"],
"c135":["hr13","hc18","hb13"],
"c136":["hr14","hc10","hb11"],
"c137":["hr14","hc11","hb11"],
"c138":["hr14","hc12","hb11"],
"c139":["hr14","hc13","hb12"],
"c140":["hr14","hc14","hb12"],
"c141":["hr14","hc15","hb12"],
"c142":["hr14","hc16","hb13"],
"c143":["hr14","hc17","hb13"],
"c144":["hr14","hc18","hb13"],
"c145":["hr15","hc10","hb11"],
"c146":["hr15","hc11","hb11"],
"c147":["hr15","hc12","hb11"],
"c148":["hr15","hc13","hb12"],
"c149":["hr15","hc14","hb12"],
"c150":["hr15","hc15","hb12"],
"c151":["hr15","hc16","hb13"],
"c152":["hr15","hc17","hb13"],
"c153":["hr15","hc18","hb13"],
"c154":["hr16","hc10","hb12"],
"c155":["hr16","hc11","hb12"],
"c156":["hr16","hc12","hb12"],
"c157":["hr16","hc13","hb13"],
"c158":["hr16","hc14","hb13"],
"c159":["hr16","hc15","hb13"],
"c160":["hr16","hc16","hb14"],
"c161":["hr16","hc17","hb14"],
"c162":["hr16","hc18","hb14"],
"c163":["hr17","hc10","hb12"],
"c164":["hr17","hc11","hb12"],
"c165":["hr17","hc12","hb12"],
"c166":["hr17","hc13","hb13"],
"c167":["hr17","hc14","hb13"],
"c168":["hr17","hc15","hb13"],
"c169":["hr17","hc16","hb14"],
"c170":["hr17","hc17","hb14"],
"c171":["hr17","hc18","hb14"],
"c172":["hr18","hc10","hb12"],
"c173":["hr18","hc11","hb12"],
"c174":["hr18","hc12","hb12"],
"c175":["hr18","hc13","hb13"],
"c176":["hr18","hc14","hb13"],
"c177":["hr18","hc15","hb13"],
"c178":["hr18","hc16","hb14"],
"c179":["hr18","hc17","hb14"],
"c180":["hr18","hc18","hb14"],
"c20":["hr20","hc20","hb20"],
"c21":["hr20","hc21","hb20"],
"c22":["hr20","hc22","hb20"],
"c23":["hr20","hc23","hb21"],
"c24":["hr20","hc24","hb21"],
"c25":["hr20","hc25","hb21"],
"c26":["hr20","hc26","hb22"],
"c27":["hr20","hc27","hb22"],
"c28":["hr20","hc28","hb22"],
"c29":["hr21","hc20","hb20"],
"c210":["hr21","hc21","hb20"],
"c211":["hr21","hc22","hb20"],
"c212":["hr21","hc23","hb21"],
"c213":["hr21","hc24","hb21"],
"c214":["hr21","hc25","hb21"],
"c215":["hr21","hc26","hb22"],
"c216":["hr21","hc27","hb22"],
"c217":["hr21","hc28","hb22"],
"c218":["hr22","hc20","hb20"],
"c219":["hr22","hc21","hb20"],
"c220":["hr22","hc22","hb20"],
"c221":["hr22","hc23","hb21"],
"c222":["hr22","hc24","hb21"],
"c223":["hr22","hc25","hb21"],
"c224":["hr22","hc26","hb22"],
"c225":["hr22","hc27","hb22"],
"c226":["hr22","hc28","hb22"],
"c227":["hr23","hc20","hb21"],
"c228":["hr23","hc21","hb21"],
"c229":["hr23","hc22","hb21"],
"c230":["hr23","hc23","hb22"],
"c231":["hr23","hc24","hb22"],
"c232":["hr23","hc25","hb22"],
"c233":["hr23","hc26","hb23"],
"c234":["hr23","hc27","hb23"],
"c235":["hr23","hc28","hb23"],
"c236":["hr24","hc20","hb21"],
"c237":["hr24","hc21","hb21"],
"c238":["hr24","hc22","hb21"],
"c239":["hr24","hc23","hb22"],
"c240":["hr24","hc24","hb22"],
"c241":["hr24","hc25","hb22"],
"c242":["hr24","hc26","hb23"],
"c243":["hr24","hc27","hb23"],
"c244":["hr24","hc28","hb23"],
"c245":["hr25","hc20","hb21"],
"c246":["hr25","hc21","hb21"],
"c247":["hr25","hc22","hb21"],
"c248":["hr25","hc23","hb22"],
"c249":["hr25","hc24","hb22"],
"c250":["hr25","hc25","hb22"],
"c251":["hr25","hc26","hb23"],
"c252":["hr25","hc27","hb23"],
"c253":["hr25","hc28","hb23"],
"c254":["hr26","hc20","hb22"],
"c255":["hr26","hc21","hb22"],
"c256":["hr26","hc22","hb22"],
"c257":["hr26","hc23","hb23"],
"c258":["hr26","hc24","hb23"],
"c259":["hr26","hc25","hb23"],
"c260":["hr26","hc26","hb24"],
"c261":["hr26","hc27","hb24"],
"c262":["hr26","hc28","hb24"],
"c263":["hr27","hc20","hb22"],
"c264":["hr27","hc21","hb22"],
"c265":["hr27","hc22","hb22"],
"c266":["hr27","hc23","hb23"],
"c267":["hr27","hc24","hb23"],
"c268":["hr27","hc25","hb23"],
"c269":["hr27","hc26","hb24"],
"c270":["hr27","hc27","hb24"],
"c271":["hr27","hc28","hb24"],
"c272":["hr28","hc20","hb22"],
"c273":["hr28","hc21","hb22"],
"c274":["hr28","hc22","hb22"],
"c275":["hr28","hc23","hb23"],
"c276":["hr28","hc24","hb23"],
"c277":["hr28","hc25","hb23"],
"c278":["hr28","hc26","hb24"],
"c279":["hr28","hc27","hb24"],
"c280":["hr28","hc28","hb24"],
"c30":["hr30","hc30","hb30"],
"c31":["hr30","hc31","hb30"],
"c32":["hr30","hc32","hb30"],
"c33":["hr30","hc33","hb31"],
"c34":["hr30","hc34","hb31"],
"c35":["hr30","hc35","hb31"],
"c36":["hr30","hc36","hb32"],
"c37":["hr30","hc37","hb32"],
"c38":["hr30","hc38","hb32"],
"c39":["hr31","hc30","hb30"],
"c310":["hr31","hc31","hb30"],
"c311":["hr31","hc32","hb30"],
"c312":["hr31","hc33","hb31"],
"c313":["hr31","hc34","hb31"],
"c314":["hr31","hc35","hb31"],
"c315":["hr31","hc36","hb32"],
"c316":["hr31","hc37","hb32"],
"c317":["hr31","hc38","hb32"],
"c318":["hr32","hc30","hb30"],
"c319":["hr32","hc31","hb30"],
"c320":["hr32","hc32","hb30"],
"c321":["hr32","hc33","hb31"],
"c322":["hr32","hc34","hb31"],
"c323":["hr32","hc35","hb31"],
"c324":["hr32","hc36","hb32"],
"c325":["hr32","hc37","hb32"],
"c326":["hr32","hc38","hb32"],
"c327":["hr33","hc30","hb31"],
"c328":["hr33","hc31","hb31"],
"c329":["hr33","hc32","hb31"],
"c330":["hr33","hc33","hb32"],
"c331":["hr33","hc34","hb32"],
"c332":["hr33","hc35","hb32"],
"c333":["hr33","hc36","hb33"],
"c334":["hr33","hc37","hb33"],
"c335":["hr33","hc38","hb33"],
"c336":["hr34","hc30","hb31"],
"c337":["hr34","hc31","hb31"],
"c338":["hr34","hc32","hb31"],
"c339":["hr34","hc33","hb32"],
"c340":["hr34","hc34","hb32"],
"c341":["hr34","hc35","hb32"],
"c342":["hr34","hc36","hb33"],
"c343":["hr34","hc37","hb33"],
"c344":["hr34","hc38","hb33"],
"c345":["hr35","hc30","hb31"],
"c346":["hr35","hc31","hb31"],
"c347":["hr35","hc32","hb31"],
"c348":["hr35","hc33","hb32"],
"c349":["hr35","hc34","hb32"],
"c350":["hr35","hc35","hb32"],
"c351":["hr35","hc36","hb33"],
"c352":["hr35","hc37","hb33"],
"c353":["hr35","hc38","hb33"],
"c354":["hr36","hc30","hb32"],
"c355":["hr36","hc31","hb32"],
"c356":["hr36","hc32","hb32"],
"c357":["hr36","hc33","hb33"],
"c358":["hr36","hc34","hb33"],
"c359":["hr36","hc35","hb33"],
"c360":["hr36","hc36","hb34"],
"c361":["hr36","hc37","hb34"],
"c362":["hr36","hc38","hb34"],
"c363":["hr37","hc30","hb32"],
"c364":["hr37","hc31","hb32"],
"c365":["hr37","hc32","hb32"],
"c366":["hr37","hc33","hb33"],
"c367":["hr37","hc34","hb33"],
"c368":["hr37","hc35","hb33"],
"c369":["hr37","hc36","hb34"],
"c370":["hr37","hc37","hb34"],
"c371":["hr37","hc38","hb34"],
"c372":["hr38","hc30","hb32"],
"c373":["hr38","hc31","hb32"],
"c374":["hr38","hc32","hb32"],
"c375":["hr38","hc33","hb33"],
"c376":["hr38","hc34","hb33"],
"c377":["hr38","hc35","hb33"],
"c378":["hr38","hc36","hb34"],
"c379":["hr38","hc37","hb34"],
"c380":["hr38","hc38","hb34"],
		
		
		
		},
	style:{
        '#sdkWrapper':{
            'width': '60em',
            'height': '60em',
            'font-size': '4.4mm'
        },
        '.cell':{
            'height':'4.71%',
            'width':'4.71%'
        },
		'.cell[houses~="hr01"], .cell[houses~="hr11"]': {
			'top': '4.71%'
		},
		'.cell[houses~="hr02"], .cell[houses~="hr12"]': {
			'top': '9.42%'
		},
		'.cell[houses~="hr03"], .cell[houses~="hr13"]': {
			"border-top":"black thin solid",
			'top': '14.13%'
		},
		'.cell[houses~="hr04"], .cell[houses~="hr14"]': {
			'top': '18.84%'
		},
		'.cell[houses~="hr05"], .cell[houses~="hr15"]': {
			'top': '23.55%'
		},
		'.cell[houses~="hr06"], .cell[houses~="hr16"]': {
			"border-top":"black thin solid",
			'top': '28.26%'
		},
		'.cell[houses~="hr07"], .cell[houses~="hr17"]': {
			'top': '32.97%'
		},
		'.cell[houses~="hr08"], .cell[houses~="hr18"]': {
			'top': '37.68%'
		},
		'.cell[houses~="hc01"], .cell[houses~="hc21"]': {
			'left': '4.71%'
		},
		'.cell[houses~="hc02"], .cell[houses~="hc22"]': {
			'left': '9.42%'
		},
		'.cell[houses~="hc03"], .cell[houses~="hc23"]': {
			"border-left":"black thin solid",
			'left': '14.13%'
		},
		'.cell[houses~="hc04"], .cell[houses~="hc24"]': {
			'left': '18.84%'
		},
		'.cell[houses~="hc05"], .cell[houses~="hc25"]': {
			'left': '23.55%'
		},
		'.cell[houses~="hc06"], .cell[houses~="hc26"]': {
			"border-left":"black thin solid",
			'left': '28.26%'
		},
		'.cell[houses~="hc07"], .cell[houses~="hc27"]': {
			'left': '32.97%'
		},
		'.cell[houses~="hc08"], .cell[houses~="hc28"]': {
			'left': '37.68%'
		},
		
		'.cell[houses~="hr08"], .cell[houses~="hr18"]': {
			'top': '37.68%'
		},
		
		'.cell[houses~="hr20"], .cell[houses~="hr30"]':{
            'top': '51.81%'
		},
		'.cell[houses~="hr21"], .cell[houses~="hr31"]':{
            'top': '56.52%'
		},
		'.cell[houses~="hr22"], .cell[houses~="hr32"]':{
            'top': '61.23%'
		},
		'.cell[houses~="hr23"], .cell[houses~="hr33"]':{
            'top': '65.94%'
		},
		'.cell[houses~="hr24"], .cell[houses~="hr34"]':{
            'top': '70.65%'
		},
		'.cell[houses~="hr25"], .cell[houses~="hr35"]':{
            'top': '75.36%'
		},
		'.cell[houses~="hr26"], .cell[houses~="hr36"]':{
            'top': '80.07%'
		},
		'.cell[houses~="hr27"], .cell[houses~="hr37"]':{
            'top': '84.78%'
		},
		'.cell[houses~="hr28"], .cell[houses~="hr38"]':{
            'top': '9.49%'
		},
		'.candid[candidid="1"], .candid[candidid="2"], .candid[candidid="3"]': {
			'top' : '4%'
		},
		'.candid[candidid="4"], .candid[candidid="5"], .candid[candidid="6"]': {
			'top' : '34%'
		},
		'.candid[candidid="7"], .candid[candidid="8"], .candid[candidid="9"]': {
			'top' : '64%'
		},
		'.candid[candidid="1"], .candid[candidid="4"], .candid[candidid="7"]': {
			'left': '12%'
		},
		'.candid[candidid="2"], .candid[candidid="5"], .candid[candidid="8"]': {
			'left': '42%'
		},
		'.candid[candidid="3"], .candid[candidid="6"], .candid[candidid="9"]': {
			'left': '72%'
		}
	},
	predefined:[""]
},self)